#include<stdio.h>


int main(){
    int array[4][4],array2[4][4];
    for(int i=0;i<4;i++){
        for(int j=0;j<4;j++){
             scanf("%d",&array[i][j]);
        }  
    }        
    int c=0;
    for(int i=0;i<4;i++){
                    
        for(int a=0,b=3;a<4,b>=0;a++,b--){

             array2[a][c]=array[c][b];
               
            }
             c++;
    } 

    for(int i=0;i<4;i++){
        for(int j=0;j<4;j++){
             printf("%d ",array2[i][j]);
        }
        printf("\n");
    }  
        
    return 0;

}



 // 逆时针旋转90度
    // for(int i=0; i<4; i++){
    //     for(int j=0; j<4; j++){
    //         array2[3 - j][i] = array[i][j];
    //     }
    // } 

// 顺时针旋转90度
    // for(int i=0; i<4; i++){
    //     for(int j=0; j<4; j++){
    //         array2[j][3 - i] = array[i][j];
    //     }
    // } 


//
    // // 原地逆时针旋转90度（分2层处理，4×4矩阵共2层：layer 0和layer 1）
    // for (int layer = 0; layer < 4/2; layer++) {  // 层数=边长/2
    //     int start = layer;
    //     int end = 3 - layer;  // 每层的结束索引（4-1-layer）

    //     for (int i = start; i < end; i++) {  // 遍历每层的边（排除重复转角）
    //         int offset = i - start;  // 偏移量，控制每层边的位置

    //         // 1. 缓存左上角（top）的元素
    //         int top = array[start][i];

    //         // 2. 左上角 = 右上角（right）
    //         array[start][i] = array[i][end];

    //         // 3. 右上角 = 右下角（bottom）
    //         array[i][end] = array[end][end - offset];

    //         // 4. 右下角 = 左下角（left）
    //         array[end][end - offset] = array[end - offset][start];

    //         // 5. 左下角 = 缓存的左上角（top）
    //         array[end - offset][start] = top;
    //     }
    // }
